package com.zyg.exception;

import com.zyg.model.Result;
import com.zyg.util.ThrowableUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
 * 捕获全局异常，以json的格式返回
 */

@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
    /**
     * 处理所有不可知的异常
     */
    @ExceptionHandler(value = Throwable.class)
    public Result handleException(Throwable e){
        // 打印堆栈信息
        log.error(ThrowableUtil.getStackTrace(e));
        return new Result().initError();
    }

    /**
     * 基础自定义错误类型
     */
    @ExceptionHandler(value = ZygBaseException.class)
    public Result zygBaseException(ZygBaseException e){
        // 打印堆栈信息
        log.error(ThrowableUtil.getStackTrace(e));
        Result result = new Result();
        result.setCode(e.getCode());
        result.setMsg(e.getMessage());
        return result;
    }

//    /**
//     * 定义的唯一索引重复异常
//     * @param e
//     * @return
//     */
//    @ExceptionHandler(value = MySQLIntegrityConstraintViolationException.class)
//    public Result MYsqlUniqueValueRepetitionException(ZygBaseException e){
//        // 打印堆栈信息
//        log.error(ThrowableUtil.getStackTrace(e));
//        Result result = new Result();
//        result.setCode(e.getCode());
//        result.setMsg(e.getMessage());
//        return result;
//    }
}
